最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

1
2
3
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶:

  • 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

Code:

96%95%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public int maxSubArray(int[] nums) {
if(nums==null||nums.length==0)return 0;
int max=Integer.MIN_VALUE;
int pre=Integer.MIN_VALUE;
//局部最优解
int nice=Integer.MIN_VALUE;
int[] list=new int[nums.length];

for(int i=0;i<nums.length;i++)
{
//局部优解不优于前一个
int temp=(pre>nice)?pre:nice;
pre=nums[i];
if(temp<0)
{
nice=nums[i];
}else{
nice=nums[i]+temp;
}
if(nice>max)max=nice;
}
//if(pre>max)return pre;
return max;
}
}